package gruppe5.dame.client;

import java.awt.Image;
import java.io.File;

import javax.swing.ImageIcon;
import javax.swing.UIManager;

/**
 * Die Ressourcen Klasse enth�lt Dateipfade und Einstellungen.
 * @author Sebastian Kramer 
 * @author Martin Eutinger
 * @author Edmond Landry Nenzeko
 */
public class Ressourcen {
	
	////////////////////////////////////////
	/////////ELEMENTS
	////////////////////////////////////////
	
	/**
	 * Liste aller im Theme-Ordner gespeicherten Themes.
	 */
	private static String[] availableThemes;
	
	/**
	 * Dateipfad in dem die Themen zu finden sind.
	 */
	private static String themesPath = System.getProperty("user.dir") +File.separator +"themes";
	
	/**
	 * Der Ordnername des ausgew�hlten Themes.
	 */
	private static String selectedTheme = "Standard";
	
	/**
	 * Dateipfad zum ausgewaehlten Theme.
	 */
	private static String selectedThemePath = themesPath +File.separator +selectedTheme;
	
	/**
	 * Das ausgew�hlte Look and Feel.
	 */
	private static String lookAndFeel;
	
	private static ImageIcon whitePawn;
	
	private static ImageIcon whiteDame;
	
	private static ImageIcon blackPawn;
	
	private static ImageIcon blackDame;
		
	
	
	/**
	 * Der Konstruktor von Ressourcen.
	 * Private, weil keine Instanziierung m�glich sein soll.
	 */
	private Ressourcen() {}
	
	/**
	 * Der static "Konstruktor" von Ressourcen.
	 * Liest die verf�gbaren Themes im Ordner themes und speichert diese in availableThemes;
	 * stellt als Standard Look and Feel (LnF) das System LnF ein.
	 */
	static
	{
		availableThemes = new File(themesPath).list();
		lookAndFeel = UIManager.getSystemLookAndFeelClassName();
		
		Ressourcen.updateIcons(50, 50);
	}
	
	
	////////////////////////////////////////////////
	/////////////METHODS
	////////////////////////////////////////////////
	
	public static void updateIcons(int width, int height) 
	{
		ImageIcon icon = new ImageIcon(selectedThemePath +File.separator +"white.png");
		icon.setImage(icon.getImage().getScaledInstance(width, height, Image.SCALE_SMOOTH));
		Ressourcen.whitePawn = icon;
		
		icon = new ImageIcon(selectedThemePath +File.separator +"white_dame.png");
		icon.setImage(icon.getImage().getScaledInstance(width, height, Image.SCALE_SMOOTH));
		Ressourcen.whiteDame = icon;
		
		icon = new ImageIcon(selectedThemePath +File.separator +"black.png");
		icon.setImage(icon.getImage().getScaledInstance(width, height, Image.SCALE_SMOOTH));
		Ressourcen.blackPawn = icon;
		
		icon = new ImageIcon(selectedThemePath +File.separator +"black_dame.png");
		icon.setImage(icon.getImage().getScaledInstance(width, height, Image.SCALE_SMOOTH));
		Ressourcen.blackDame = icon;
	}
	
	/**
	 * Liefert eine Liste mit verf�gbaren Themen zur�ck.
	 * @return Die Liste mit verf�gbaren Themen.
	 */
	public static String[] getThemenListe() { return Ressourcen.availableThemes; }
	

	/**
	 * Liefert den Namen des ausgewh�lten Themas als String zur�ck.
	 * @return Ein String mit dem Namen des ausgewh�lten Themas.
	 */
	public static String getSelectedTheme() { return Ressourcen.selectedTheme;	}

	/**
	 * �ndert das Thema zu newTheme.
	 * @param newTheme Das neue Thema, das eingestellt werden soll.
	 */
	public static void changeTheme(String newTheme)
	{
		for(String tmpTheme : availableThemes)
		{
			if(tmpTheme.equals(newTheme))
			{
				Ressourcen.selectedTheme = newTheme;
				Ressourcen.selectedThemePath = Ressourcen.themesPath +File.separator +newTheme;
			}
		}
	}

	/**
	 * �ndert das eingestellte Look and Feel zu _lookAndFeel.
	 * @param _lookAndFeel Das Look and Feel, das eingestellt werden soll.
	 */
	public static void setLookAndFeel(String _lookAndFeel) { Ressourcen.lookAndFeel = _lookAndFeel; }

	/**
	 * Liefert den Namen des ausgew�hlten Look and Feels als String zur�ck.
	 * @return Ein String mit dem Namen des ausgewh�lten Look and Feels.
	 */
	public static String getLookAndFeel() { return Ressourcen.lookAndFeel; }
	
	public static ImageIcon getWhitePawn() { return Ressourcen.whitePawn; }
	
	public static ImageIcon getWhiteDame() { return Ressourcen.whiteDame; }
	
	public static ImageIcon getBlackPawn() { return Ressourcen.blackPawn; }

	public static ImageIcon getBlackDame() { return Ressourcen.blackDame; }
}
